該文章同步發佈於:我的部落格
也歡迎關注我的 Facebook 以及 Instagram 接收軟體相關的資訊!
以及這個 30 天的 Docker 教學有出書喔!如果喜歡這個系列可以支持一下,天瓏書局
昨天我們學到了替容器命名以及為什麼重新啟動容器不需要加入原先的設定,今天將繼續把容器相關的指令給交代完。
在學會背景執行容器後,會遇到沒辦法觀看事件紀錄 ( Log ) 的情形發生,這時候很簡單,接續著上面的章節,我們一樣對 nginx 這個容器下指令
$ docker container logs nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/08/30 16:23:35 [notice] 1#1: using the "epoll" event method
2022/08/30 16:23:35 [notice] 1#1: nginx/1.23.1
2022/08/30 16:23:35 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/08/30 16:23:35 [notice] 1#1: OS: Linux 5.10.104-linuxkit
2022/08/30 16:23:35 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/08/30 16:23:35 [notice] 1#1: start worker processes
2022/08/30 16:23:35 [notice] 1#1: start worker process 32
2022/08/30 16:23:35 [notice] 1#1: start worker process 33
2022/08/30 16:23:35 [notice] 1#1: start worker process 34
$
但這只是把事件紀錄印出來,有時候在網站開發的情況下,我們需要一直持續追蹤事件的進展,這時候加上 --follow
的參數,就能夠達到效果。
$ docker container logs --follow nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/08/30 16:23:35 [notice] 1#1: using the "epoll" event method
2022/08/30 16:23:35 [notice] 1#1: nginx/1.23.1
2022/08/30 16:23:35 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/08/30 16:23:35 [notice] 1#1: OS: Linux 5.10.104-linuxkit
2022/08/30 16:23:35 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/08/30 16:23:35 [notice] 1#1: start worker processes
2022/08/30 16:23:35 [notice] 1#1: start worker process 32
2022/08/30 16:23:35 [notice] 1#1: start worker process 33
2022/08/30 16:23:35 [notice] 1#1: start worker process 34
# 這邊會像是當機一樣,等待事件記錄
同理,要離開只需要下 Ctrl + C
的指令就能夠離開輸出的畫面。
這章節都說了是容器的生命週期,當然要在最後刪除掉容器才算是圓滿,容器本身是會佔掉電腦的硬碟空間,所以刪除容器是以後常常會做的一件事情。
$ docker container rm nginx
Error response from daemon: You cannot remove a running container 3e489a611df3a09a50dec629824f2d4d7b5f132a961917df Stop the container before attempting removal or force remove
rm
這個動作意指 remove 的意思;但在這邊我們可以看到 daemon 給了我們一個錯誤,大意上是說我們不能夠刪除掉一個正常執行的容器。
所以這邊我們有兩種做法:
第一個是先暫停在刪除容器,這也是比較文明一點的做法:
$ docker container stop nginx
nginx
$ docker container rm nginx
nginx
第二個則是強行刪除正在執行的容器:
$ docker container rm --force nginx
nginx
接著為了證明有刪除這件事,我們再列出所有的容器吧!
$ docker container list --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
恭喜你見證了一個容器從啟動、暫停、重新啟動、刪除的過程。
在上面所有的指令都採用完整的寫法,最大的目的是希望大家可以了解縮寫的原意是什麼,這在使用指令上也可以幫助記憶,一開始可以嘗試多使用完整的指令,之後再嘗試使用縮寫會比較好喔!
提供一些小小的練習來熟悉本章的內容,通常會比較難一點;若是想不出來也不需要灰心,有些時候可能是指令不熟悉導致,可以往前幾天的文章看來加強記憶,記得 --help
以及 docs.docker.com 會是你最好的夥伴。
--env POSTGRES_PASSWORD=mysecretpassword
才能夠正確啟動docker container logs
的指令來確認服務都有正常啟動docker container list --all
來確認容器都有徹底刪除今天我們結束了容器基礎操作的章節,明天會稍微介紹一下容器以及虛擬機之間的差別。
有時間的新手們可以稍微試著做做看練習,多多熟悉 Docker 的指令對於後面的使用會有幫助的!
那就這樣啦~明天見!